﻿using AjaxControlToolkit;
using ProyectoSalvadorDelMundo.Helpers;
using System;
using System.Configuration;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections.Generic;

namespace ProyectoSalvadorDelMundo.CatalogosGrupales.Servicios
{
    public partial class Servicios : PaginaBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

                // Navegacion
                linkNav.NavigateUrl = ConfigurationManager.AppSettings.GetValues("linkNav-NavigateUrl")[0];
                linkNav.Text = ConfigurationManager.AppSettings.GetValues("linkNav-Text")[0];

                lblNavActiva.Text = ConfigurationManager.AppSettings.GetValues("lblNavActiva-Text")[0];
                lblNavActiva.CssClass = ConfigurationManager.AppSettings.GetValues("lblNavActiva-CssClass")[0];

                // Titulo
                lblTitulo.Text = ConfigurationManager.AppSettings.GetValues("lblTitulo-Text")[0];
                lblTitulo.CssClass = ConfigurationManager.AppSettings.GetValues("lblTitulo-CssClass")[0];

                // Agregar
                btnAgregar.Text = ConfigurationManager.AppSettings.GetValues("btnAgregar-Text")[0];
                btnAgregar.ToolTip = ConfigurationManager.AppSettings.GetValues("btnAgregar-ToolTip")[0];
                btnAgregar.CssClass = ConfigurationManager.AppSettings.GetValues("btnAgregar-CssClass")[0];

                // Buscar 
                btnBuscar.ImageUrl = ConfigurationManager.AppSettings.GetValues("btnBuscar-ImageUrl")[0];
                btnBuscar.ToolTip = ConfigurationManager.AppSettings.GetValues("btnBuscar-ToolTip")[0];
                btnBuscar.AlternateText = ConfigurationManager.AppSettings.GetValues("btnBuscar-AlternateText")[0];
                btnBuscar.CssClass = ConfigurationManager.AppSettings.GetValues("btnBuscar-CssClass")[0];

                txtBuscar.Attributes.Add("placeholder", ConfigurationManager.AppSettings.GetValues("txtBuscar-placeholder")[0]);
                txtBuscar.CssClass = ConfigurationManager.AppSettings.GetValues("txtBuscar-CssClass")[0]; ;

                // Popup
                //-----------------
                lblAccion.Visible = false;
                lblAccion.Enabled = false;
                lblAccion.Text = string.Empty;

                pnlAgregarEditar.CssClass = "modal-dialog modal-lg";
                pnlAgregarEditar.Attributes.Add("Style", "display: none");


                // Popup Header
                btnPopX.Text = "X";
                btnPopX.CssClass = "close";
                //btnPopX.Attributes.Add("data-dismiss", "modal");


                lblPopupTitulo.CssClass = "modal-title";

                // Popup Contenido
                txtId.Enabled = false;

                lblNombre.Text = "Nombre";
                lblNombre.AssociatedControlID = "txtNombre";
                lblNombre.CssClass = "col-sm-2 control-label";

                lblServicioRelacionado.Text = "Servicio Relacionado";
                lblServicioRelacionado.AssociatedControlID = "ddlServicioRelacionado";
                lblServicioRelacionado.CssClass = "col-sm-2 control-label";

                txtNombre.Attributes.Add("placeholder", "Ingresar Nombre");
                txtNombre.CssClass = "form-control";

                ddlServicioRelacionado.CssClass = "form-control";
                // Popup Footer
                btnPopCerrar.Text = "Cerrar";
                btnPopCerrar.CssClass = "btn btn-default";
                //btnPopCerrar.Attributes.Add("data-dismiss", "modal");

                btnPopGuardar.Text = "Guardar Cambios";

                btnPopGuardar.OnClientClick = "Guardar";

                this.Session["Grupo"] = "18";
                // Cargar datos.
                this.Page.Form.DefaultButton = btnBuscar.ID;
                this.Page.Form.DefaultFocus = txtBuscar.ID;
                if (RefrescarAsambleas())
                {
                    linkIrMinisterios.Text = "";
                    linkIrMinisterios.Enabled = false;
                    ddl.SelectedIndex = 0;

                    if(RefrescarGruposServicios())
                    {
                        linkIrMinisterios.Text = "";
                        btnAgregar.Enabled = true;
                        linkIrMinisterios.Enabled = false;
                        ddlGrupoServicio.SelectedIndex = 0;
                        RefrescarDatos();
                    }
                    else
                    {
                        lsvLista.DataSource = null;
                        lsvLista.DataBind();
                        linkIrMinisterios.Text = "Agrear Grupos Servicios";
                        btnAgregar.Enabled = false;
                        btnBuscar.Enabled = false;
                        linkIrMinisterios.Enabled = true;
                        linkIrMinisterios.NavigateUrl = "~/CatalogosGrupales/GruposServicios/GruposServicios.aspx";
                    }
                }
                else
                {
                    btnAgregar.Enabled = false;
                    btnBuscar.Enabled = false;
                    linkIrMinisterios.Text = "Agrear Asambleas";
                    linkIrMinisterios.Enabled = true;
                    linkIrMinisterios.NavigateUrl = "~/Asambleas/Asamblea/Asambleas.aspx";
                }

            }
        }

        protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (RefrescarGruposServicios())
            {
                linkIrMinisterios.Text = "";
                linkIrMinisterios.Enabled = false;
                ddlGrupoServicio.SelectedIndex = 0;
                RefrescarDatos();
            }
            else
            {
                lsvLista.DataSource = null;
                lsvLista.DataBind();
                linkIrMinisterios.Text = "Agrear Servicios";
                linkIrMinisterios.Enabled = true;
            }
        }
        protected void ddlGrupoServicio_SelectedIndexChanged(object sender, EventArgs e)
        {
            RefrescarDatos();
        }

        private DataTable Listar()
        {
            var oCn_Servicios = new CN.Servicios();
            if (txtBuscar.Text != string.Empty)
            {
                return oCn_Servicios.ListarPorBus(txtBuscar.Text, Convert.ToInt64(this.Session["Grupo"]), Convert.ToInt64(ddlGrupoServicio.SelectedValue), Convert.ToInt64(ddl.SelectedValue));
            }
            else
            {
                return oCn_Servicios.Listar(Convert.ToInt64(this.Session["Grupo"]), Convert.ToInt64(ddlGrupoServicio.SelectedValue), Convert.ToInt64(ddl.SelectedValue));
            }
        }

        private DataTable ListarAsambleas()
        {
            var oCn_Asambleas = new CN.Asambleas();
            return oCn_Asambleas.Listar(Convert.ToInt64(this.Session["Grupo"]));
        }

        private DataTable ListarGruposServicios()
        {
            var oCn_GruposServicios = new CN.GruposServicios();
            return oCn_GruposServicios.Listar(Convert.ToInt64(this.Session["Grupo"]),Convert.ToInt64(ddl.SelectedValue));
        }

        private void RefrescarDatos()
        {
            var ListaServicios = Listar();
            lsvLista.DataSource = ListaServicios;
            lsvLista.DataBind();

        }

        private Boolean RefrescarAsambleas()
        {
            var ListaAsambleas = ListarAsambleas();
            ddl.DataSource = ListaAsambleas;
            ddl.DataTextField = "NOMBRE";
            ddl.DataValueField = "ID_ASAMBLEA";
            ddl.DataBind();
            return ListaAsambleas.Rows.Count > 0 ? true : false;
        }

        private Boolean RefrescarGruposServicios()
        {
            var ListaGruposServicios = ListarGruposServicios();
            ddlGrupoServicio.DataSource = ListaGruposServicios;
            ddlGrupoServicio.DataTextField = "NOMBRE";
            ddlGrupoServicio.DataValueField = "ID_GRUPO_SERVICIO";
            ddlGrupoServicio.DataBind();
            return ListaGruposServicios.Rows.Count > 0 ? true : false;
        }


        protected void OnPagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
        {
            (lsvLista.FindControl("DataPager1") as DataPager).SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
            RefrescarDatos();
        }

        protected void Agregar(object sender, EventArgs e)
        {
            var ListaServicios = Listar();
            var newRow = ListaServicios.NewRow();
            newRow["NOMBRE"] = "-- N/A --";
            newRow["ID_SERVICIO"] = "0";
            ListaServicios.Rows.InsertAt(newRow, 0);

            Dictionary<string, object> dtId = new Dictionary<string, object>();

            foreach (DataRow Row in ListaServicios.Rows)
            {
                if (Row.RowState != DataRowState.Added && Row["id_servicio_relacionado"].ToString() != "0" && dtId.ContainsKey(Row["id_servicio_relacionado"].ToString()) == false)
                {
                    dtId.Add(Row["id_servicio_relacionado"].ToString(), null);
                }
            }


            foreach (DataRow Row in ListaServicios.Rows)
            {
                if (dtId.ContainsKey(Row["id_servicio"].ToString()) == true)
                {
                    Row.Delete();
                }
            }
            ListaServicios.AcceptChanges();
            ddlServicioRelacionado.DataSource = ListaServicios;
            
            ddlServicioRelacionado.DataTextField = "NOMBRE";
            ddlServicioRelacionado.DataValueField = "ID_SERVICIO";
            ddlServicioRelacionado.DataBind();
            ddlServicioRelacionado.SelectedValue = "0";

            txtNombre.Text = string.Empty;

            txtNombre.Enabled = true;
            ddlServicioRelacionado.Enabled = true;
            chkEsAutomatico.Enabled = true;
            chkEsAutomatico.Checked = false;

            lblAccion.Text = "Agregar";
            lblPopupTitulo.Text = "Agregar Servicio";
            btnPopGuardar.Text = "Agregar";
            btnPopGuardar.CssClass = "btn btn-primary";
            txtNombre.Focus();
            popup.Show();
        }

        protected void Editar(object sender, EventArgs e)
        {
            ListViewDataItem item = (ListViewDataItem)(sender as Control).NamingContainer;
            Label lblID = (Label)item.FindControl("ID");
            Label lblNombre = (Label)item.FindControl("NOMBRE");
            Label lblDESCRIPCION = (Label)item.FindControl("DESCRIPCION");
            Label lblID_SERVICIO_RELACIONADO = (Label)item.FindControl("ID_SERVICIO_RELACIONADO");
            CheckBox chkAutom = (CheckBox)item.FindControl("CHKAUTOMATICO");
            chkEsAutomatico.Checked = chkAutom.Checked;
            txtId.Text = lblID.Text;
            txtNombre.Text = lblNombre.Text;
            

            var ListaServicios = Listar();
            var newRow = ListaServicios.NewRow();
            newRow["NOMBRE"] = "-- N/A --";
            newRow["ID_SERVICIO"] = "0";
            ListaServicios.Rows.InsertAt(newRow, 0);

            Dictionary<string, object> dtId = new Dictionary<string, object>();

            foreach (DataRow Row in ListaServicios.Rows)
            {
                if (Row.RowState != DataRowState.Added && Row["id_servicio_relacionado"].ToString() != "0" && dtId.ContainsKey(Row["id_servicio_relacionado"].ToString()) == false)
                {
                    dtId.Add(Row["id_servicio_relacionado"].ToString(), null);
                }
            }

            foreach (DataRow Row in ListaServicios.Rows)
            {
                if (txtId.Text == Convert.ToString(Row["id_servicio"]))
                {
                    Row.Delete();
                }
                if (Row.RowState != DataRowState.Deleted && dtId.ContainsKey(Row["id_servicio"].ToString()) == true && lblID_SERVICIO_RELACIONADO.Text != Convert.ToString(Row["id_servicio"]))
                {
                    Row.Delete();
                }
            }

            ListaServicios.AcceptChanges();
            ddlServicioRelacionado.DataSource = ListaServicios;

            ddlServicioRelacionado.DataTextField = "NOMBRE";
            ddlServicioRelacionado.DataValueField = "ID_SERVICIO";
            ddlServicioRelacionado.DataBind();

            ddlServicioRelacionado.SelectedValue = lblID_SERVICIO_RELACIONADO.Text;
            txtNombre.Focus();
            txtNombre.Enabled = true;
            ddlServicioRelacionado.Enabled = true;
            chkEsAutomatico.Enabled = true;
            lblAccion.Text = "Editar";
            lblPopupTitulo.Text = "Editar Servicio";
            btnPopGuardar.Text = "Guardar Cambios";
            btnPopGuardar.CssClass = "btn btn-primary";

            popup.Show();
        }
        protected void Eliminar(object sender, EventArgs e)
        {
            ListViewDataItem item = (ListViewDataItem)(sender as Control).NamingContainer;
            Label lblID = (Label)item.FindControl("ID");
            Label lblNombre = (Label)item.FindControl("NOMBRE");
            Label lblDESCRIPCION = (Label)item.FindControl("DESCRIPCION");
            Label lblID_SERVICIO_RELACIONADO = (Label)item.FindControl("ID_SERVICIO_RELACIONADO");
            CheckBox chkAutom = (CheckBox)item.FindControl("CHKAUTOMATICO");
            chkEsAutomatico.Checked = chkAutom.Checked;
            txtId.Text = lblID.Text;
            txtNombre.Text = lblNombre.Text;

            var ListaServicios = Listar();
            ddlServicioRelacionado.Items.Clear();
            ddlServicioRelacionado.Items.Add(new ListItem() { Text = "-- N/A --", Value = "0" });
            foreach (DataRow Row in ListaServicios.Rows)
            {
                if (txtId.Text != Convert.ToString(Row["ID_SERVICIO"]))
                {
                    ddlServicioRelacionado.Items.Add(new ListItem() { Text = (string)Row["NOMBRE"], Value = Convert.ToString(Row["ID_SERVICIO"]) });
                }
            }
            ddlServicioRelacionado.DataBind();

            ddlServicioRelacionado.SelectedValue = lblID_SERVICIO_RELACIONADO.Text;

            txtNombre.Enabled = false;
            ddlServicioRelacionado.Enabled = false;
            chkEsAutomatico.Enabled = false;
            lblAccion.Text = "Eliminar";
            lblPopupTitulo.Text = "Eliminar Servicio";
            btnPopGuardar.Text = "Eliminar";
            btnPopGuardar.CssClass = "btn btn-danger";

            popup.Show();
        }

        protected void Guardar(object sender, EventArgs e)
        {
            var oCn_Servicios = new CN.Servicios();
            var oCe_Servicios = new CE.Servicios();
            var strResultado = string.Empty;

            oCe_Servicios.NOMBRE = txtNombre.Text;
            oCe_Servicios.ID_SERVICIO = lblAccion.Text == "Agregar" ? -1 : Convert.ToInt64(txtId.Text);
            oCe_Servicios.ID_GRUPO_SERVICIO = Convert.ToInt64(ddlGrupoServicio.SelectedValue);
            oCe_Servicios.ID_GRUPO = Convert.ToInt64(this.Session["Grupo"]);
            oCe_Servicios.ID_ASAMBLEA = Convert.ToInt64(ddl.SelectedValue);
            oCe_Servicios.ID_SERVICIO_RELACIONADO = Convert.ToInt64(ddlServicioRelacionado.SelectedValue); ;
            oCe_Servicios.AUTOMATICO = chkEsAutomatico.Checked;

            if (lblAccion.Text == "Eliminar")
            {
                strResultado = oCn_Servicios.Eliminar(oCe_Servicios, "Prueba");

                DataPager pgr = lsvLista.FindControl("DataPager1") as DataPager;
                if (pgr != null && lsvLista.Items.Count != pgr.TotalRowCount)
                {
                    pgr.SetPageProperties(0, pgr.MaximumRows, false);
                }
            }
            else
            {
                oCe_Servicios.IsNew = lblAccion.Text == "Editar" ? false : true;
                strResultado = oCn_Servicios.GuardarCambios(oCe_Servicios, "Prueba");
                popup.Hide();
            }
            switch (strResultado)
            {
                case "El registro no se puede borrar por que tiene registros relacionados.":
                    MostarError(strResultado);
                    break;
                    
                case "Ocurrio un error inesperado al guardar los cambios.":
                    MostarError(strResultado); 
                    break;
                default:
                    MostarExito(strResultado);
                    break;
            }

            RefrescarDatos();
        }

        protected void Buscar(object sender, EventArgs e)
        {
            RefrescarDatos();

        }

        protected void CerrarPop(object sender, EventArgs e)
        {
            popup.Hide();
        }
    }
}